有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

python结构。从Java中解包

我有以下Python指令,我想用Java理解和翻译

values = struct.unpack_from('>%dL' % 96, input_content, 0)

什么是>;%什么意思? 我检查了pythonhttp://docs.python.org/library/struct.html中的文档,但没有检查百分比。 我是否应该将每个返回值看作java中的一个字节,并将其转换为double或double?p>

谢谢你的帮助


共 (3) 个答案

  1. # 1 楼答案

    如果我用Java写同样的东西,它可能是这样的:

    DataInputStream inputcontent = new DataInputStream(in);
    long[] values = new long[96];
    for (int i = 0; i < 96; i++)
        values[i] = inputcontent.readLong();
    

    不同的是,python代码使用的是已经加载的字节

    非常感谢John Machin和Matti的解释

  2. # 2 楼答案

    Python交互式提示是您的朋友:

    >>> '>%dL' % 96
    '>96L'
    >>>
    

    所以

    values = struct.unpack_from('>%dL' % 96, input_content, 0)
    

    相当于

    values = struct.unpack_from('>96L', input_content, 0)
    

    而且struct文档应该告诉您‘>;96L'表示96个双端无符号32位整数

    我无法想象原作者为什么以如此模糊的方式写这篇文章。如果项目的数量是可变的,则有必要使用这样的技术来构建格式,但如果项目的数量是已知常量,则不必使用这种技术

  3. # 3 楼答案

    %d是一个类似于C中的Python字符串格式化程序。它所说的是用结束引号后面的东西代替格式化程序,在本例中96代替%d%d指定有符号整数十进制

    '>%dL'%96是对struct.unpack的一条指令,说明它需要解包的是一个大端无符号long,其中包含一个无符号整数十进制。在'>%dL'被传递给unpack之前,字符串格式化程序被解析,并且'>%dL'变成'>96L'。请看一下'struct'中的格式字符串部分。解包文档

    http://docs.python.org/library/stdtypes.html#string-formatting

    http://docs.python.org/library/struct.html?highlight=struct.unpack#format-strings